From e9a8f0e261c4685854f49b5ad8503c45729b96e5 Mon Sep 17 00:00:00 2001 From: Ewan Mellor Date: Sat, 28 Oct 2006 12:04:08 +0100 Subject: [PATCH] The get_by_name_label functions return a set, not a singleton, because names are not guaranteed to be unique. Signed-off-by: Ewan Mellor --- tools/libxen/include/xen_host.h | 4 ++-- tools/libxen/include/xen_network.h | 4 ++-- tools/libxen/include/xen_sr.h | 4 ++-- tools/libxen/include/xen_vdi.h | 4 ++-- tools/libxen/include/xen_vm.h | 4 ++-- tools/libxen/src/xen_host.c | 4 ++-- tools/libxen/src/xen_network.c | 4 ++-- tools/libxen/src/xen_sr.c | 4 ++-- tools/libxen/src/xen_vdi.c | 4 ++-- tools/libxen/src/xen_vm.c | 4 ++-- tools/libxen/test/test_bindings.c | 31 +++++++++++++++++++----------- 11 files changed, 40 insertions(+), 31 deletions(-) diff --git a/tools/libxen/include/xen_host.h b/tools/libxen/include/xen_host.h index 8010b24b1a..02e2e86f74 100644 --- a/tools/libxen/include/xen_host.h +++ b/tools/libxen/include/xen_host.h @@ -175,10 +175,10 @@ xen_host_create(xen_session *session, xen_host *result, xen_host_record *record) /** - * Get a reference to the object with the specified label. + * Get all the host instances with the given label. */ extern bool -xen_host_get_by_name_label(xen_session *session, xen_host *result, char *label); +xen_host_get_by_name_label(xen_session *session, struct xen_host_set **result, char *label); /** diff --git a/tools/libxen/include/xen_network.h b/tools/libxen/include/xen_network.h index 6b1f65f660..a65e20f0ff 100644 --- a/tools/libxen/include/xen_network.h +++ b/tools/libxen/include/xen_network.h @@ -173,10 +173,10 @@ xen_network_create(xen_session *session, xen_network *result, xen_network_record /** - * Get a reference to the object with the specified label. + * Get all the network instances with the given label. */ extern bool -xen_network_get_by_name_label(xen_session *session, xen_network *result, char *label); +xen_network_get_by_name_label(xen_session *session, struct xen_network_set **result, char *label); /** diff --git a/tools/libxen/include/xen_sr.h b/tools/libxen/include/xen_sr.h index fc6c3f5701..8e46dcb4c6 100644 --- a/tools/libxen/include/xen_sr.h +++ b/tools/libxen/include/xen_sr.h @@ -174,10 +174,10 @@ xen_sr_create(xen_session *session, xen_sr *result, xen_sr_record *record); /** - * Get a reference to the object with the specified label. + * Get all the SR instances with the given label. */ extern bool -xen_sr_get_by_name_label(xen_session *session, xen_sr *result, char *label); +xen_sr_get_by_name_label(xen_session *session, struct xen_sr_set **result, char *label); /** diff --git a/tools/libxen/include/xen_vdi.h b/tools/libxen/include/xen_vdi.h index 9fbc9bb756..e89b19fa30 100644 --- a/tools/libxen/include/xen_vdi.h +++ b/tools/libxen/include/xen_vdi.h @@ -180,10 +180,10 @@ xen_vdi_create(xen_session *session, xen_vdi *result, xen_vdi_record *record); /** - * Get a reference to the object with the specified label. + * Get all the VDI instances with the given label. */ extern bool -xen_vdi_get_by_name_label(xen_session *session, xen_vdi *result, char *label); +xen_vdi_get_by_name_label(xen_session *session, struct xen_vdi_set **result, char *label); /** diff --git a/tools/libxen/include/xen_vm.h b/tools/libxen/include/xen_vm.h index af784648ef..54b75d1b92 100644 --- a/tools/libxen/include/xen_vm.h +++ b/tools/libxen/include/xen_vm.h @@ -217,10 +217,10 @@ xen_vm_create(xen_session *session, xen_vm *result, xen_vm_record *record); /** - * Get a reference to the object with the specified label. + * Get all the VM instances with the given label. */ extern bool -xen_vm_get_by_name_label(xen_session *session, xen_vm *result, char *label); +xen_vm_get_by_name_label(xen_session *session, struct xen_vm_set **result, char *label); /** diff --git a/tools/libxen/src/xen_host.c b/tools/libxen/src/xen_host.c index 849ed12238..905aaf4ae5 100644 --- a/tools/libxen/src/xen_host.c +++ b/tools/libxen/src/xen_host.c @@ -150,7 +150,7 @@ xen_host_create(xen_session *session, xen_host *result, xen_host_record *record) bool -xen_host_get_by_name_label(xen_session *session, xen_host *result, char *label) +xen_host_get_by_name_label(xen_session *session, struct xen_host_set **result, char *label) { abstract_value param_values[] = { @@ -158,7 +158,7 @@ xen_host_get_by_name_label(xen_session *session, xen_host *result, char *label) .u.string_val = label } }; - abstract_type result_type = abstract_type_string; + abstract_type result_type = abstract_type_string_set; *result = NULL; XEN_CALL_("host.get_by_name_label"); diff --git a/tools/libxen/src/xen_network.c b/tools/libxen/src/xen_network.c index c774fe72df..16b9d4035b 100644 --- a/tools/libxen/src/xen_network.c +++ b/tools/libxen/src/xen_network.c @@ -148,7 +148,7 @@ xen_network_create(xen_session *session, xen_network *result, xen_network_record bool -xen_network_get_by_name_label(xen_session *session, xen_network *result, char *label) +xen_network_get_by_name_label(xen_session *session, struct xen_network_set **result, char *label) { abstract_value param_values[] = { @@ -156,7 +156,7 @@ xen_network_get_by_name_label(xen_session *session, xen_network *result, char *l .u.string_val = label } }; - abstract_type result_type = abstract_type_string; + abstract_type result_type = abstract_type_string_set; *result = NULL; XEN_CALL_("network.get_by_name_label"); diff --git a/tools/libxen/src/xen_sr.c b/tools/libxen/src/xen_sr.c index 183ad77843..ddb8f91a12 100644 --- a/tools/libxen/src/xen_sr.c +++ b/tools/libxen/src/xen_sr.c @@ -152,7 +152,7 @@ xen_sr_create(xen_session *session, xen_sr *result, xen_sr_record *record) bool -xen_sr_get_by_name_label(xen_session *session, xen_sr *result, char *label) +xen_sr_get_by_name_label(xen_session *session, struct xen_sr_set **result, char *label) { abstract_value param_values[] = { @@ -160,7 +160,7 @@ xen_sr_get_by_name_label(xen_session *session, xen_sr *result, char *label) .u.string_val = label } }; - abstract_type result_type = abstract_type_string; + abstract_type result_type = abstract_type_string_set; *result = NULL; XEN_CALL_("SR.get_by_name_label"); diff --git a/tools/libxen/src/xen_vdi.c b/tools/libxen/src/xen_vdi.c index 9246077ec4..96221158fe 100644 --- a/tools/libxen/src/xen_vdi.c +++ b/tools/libxen/src/xen_vdi.c @@ -167,7 +167,7 @@ xen_vdi_create(xen_session *session, xen_vdi *result, xen_vdi_record *record) bool -xen_vdi_get_by_name_label(xen_session *session, xen_vdi *result, char *label) +xen_vdi_get_by_name_label(xen_session *session, struct xen_vdi_set **result, char *label) { abstract_value param_values[] = { @@ -175,7 +175,7 @@ xen_vdi_get_by_name_label(xen_session *session, xen_vdi *result, char *label) .u.string_val = label } }; - abstract_type result_type = abstract_type_string; + abstract_type result_type = abstract_type_string_set; *result = NULL; XEN_CALL_("VDI.get_by_name_label"); diff --git a/tools/libxen/src/xen_vm.c b/tools/libxen/src/xen_vm.c index c2f2ff7558..5286067128 100644 --- a/tools/libxen/src/xen_vm.c +++ b/tools/libxen/src/xen_vm.c @@ -280,7 +280,7 @@ xen_vm_create(xen_session *session, xen_vm *result, xen_vm_record *record) bool -xen_vm_get_by_name_label(xen_session *session, xen_vm *result, char *label) +xen_vm_get_by_name_label(xen_session *session, struct xen_vm_set **result, char *label) { abstract_value param_values[] = { @@ -288,7 +288,7 @@ xen_vm_get_by_name_label(xen_session *session, xen_vm *result, char *label) .u.string_val = label } }; - abstract_type result_type = abstract_type_string; + abstract_type result_type = abstract_type_string_set; *result = NULL; XEN_CALL_("VM.get_by_name_label"); diff --git a/tools/libxen/test/test_bindings.c b/tools/libxen/test/test_bindings.c index 5468c6bb62..0c47305a09 100644 --- a/tools/libxen/test/test_bindings.c +++ b/tools/libxen/test/test_bindings.c @@ -1,5 +1,5 @@ /* - Copyright (c) 2006 XenSource, Inc. + * Copyright (c) 2006 XenSource, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ + */ #define _GNU_SOURCE #include @@ -320,8 +320,9 @@ static void create_new_vm(xen_session *session) /* * Create a new disk for the new VM. */ - xen_sr sr; - if (!xen_sr_get_by_name_label(session, &sr, "Local")) + xen_sr_set *srs; + if (!xen_sr_get_by_name_label(session, &srs, "Local") || + srs->size < 1) { fprintf(stderr, "SR lookup failed.\n"); print_error(session); @@ -331,7 +332,7 @@ static void create_new_vm(xen_session *session) xen_sr_record_opt sr_record = { - .u.handle = sr + .u.handle = srs->contents[0] }; xen_vdi_record vdi0_record = { @@ -351,16 +352,24 @@ static void create_new_vm(xen_session *session) fprintf(stderr, "VDI creation failed.\n"); print_error(session); - xen_sr_free(sr); + xen_sr_set_free(srs); xen_vm_free(vm); return; } + xen_vm_record_opt vm_record_opt = + { + .u.handle = vm + }; + xen_vdi_record_opt vdi0_record_opt = + { + .u.handle = vdi0 + }; xen_vbd_record vbd0_record = { - .vm = vm, - .vdi = vdi0, + .vm = &vm_record_opt, + .vdi = &vdi0_record_opt, .device = "sda1", .mode = XEN_VBD_MODE_RW, .driver = XEN_DRIVER_TYPE_PARAVIRTUALISED @@ -373,7 +382,7 @@ static void create_new_vm(xen_session *session) print_error(session); xen_vdi_free(vdi0); - xen_sr_free(sr); + xen_sr_set_free(srs); xen_vm_free(vm); return; } @@ -396,7 +405,7 @@ static void create_new_vm(xen_session *session) xen_uuid_free(vbd0_uuid); xen_vbd_free(vbd0); xen_vdi_free(vdi0); - xen_sr_free(sr); + xen_sr_set_free(srs); xen_vm_free(vm); return; } @@ -410,6 +419,6 @@ static void create_new_vm(xen_session *session) xen_uuid_free(vbd0_uuid); xen_vbd_free(vbd0); xen_vdi_free(vdi0); - xen_sr_free(sr); + xen_sr_set_free(srs); xen_vm_free(vm); } -- 2.30.2